﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using IBE;

namespace Web
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                txtDepartureDate.Text = "20/05/2015";
                txtReturnDate.Text = "25/05/2015";
                txtStartPoint.Text = "Hanoi, Vietnam";
                txtEndPoint.Text = "Ho Chi Minh, Vietnam";
                hdnValueStartPoint.Value = "HAN";
                hdnValueEndPoint.Value = "SGN";
            }
        }

        protected void ShowMessageBox(string title, string message)
        {
            MessageBox.Visible = true;
            lblMessageTitle.Text = title;
            lblMessage.Text = message;
        }

        protected bool CheckValid()
        {
            bool isOk = true;
            Common utility = new Common();
            string startPoint = hdnValueStartPoint.Value;
            string endPoint = hdnValueEndPoint.Value;
            if (startPoint == "" || txtStartPoint.Text.Trim() == "")
            {
                ShowMessageBox("City", "Điểm đi không được để trống");
                return false;
            }

            if (endPoint == "" || txtEndPoint.Text.Trim() == "")
            {
                ShowMessageBox("City", "Điểm đến không được để trống");
                return false;
            }

            if (startPoint == endPoint)
            {
                ShowMessageBox("City", "Điểm đi và điểm đến không được trùng nhau");
                return false;
            }

            if (!CheckValidDate(txtDepartureDate.Text.Trim(), "dd/MM/yyyy"))
            {
                ShowMessageBox("Departure date", "Ngày khởi hành không hợp lệ");
                return false;
            }

            if (rdbRoundTrip.Checked)
            {
                if (!CheckValidDate(txtReturnDate.Text.Trim(), "dd/MM/yyyy"))
                {
                    ShowMessageBox("Return date", "Ngày quay về không hợp lệ");
                    return false;
                }
                else
                {
                    DateTime departureDate = utility.GetDateFormat(txtDepartureDate.Text.Trim(), "dd/MM/yyyy");
                    DateTime returnDate = utility.GetDateFormat(txtReturnDate.Text.Trim(), "dd/MM/yyyy");
                    if (departureDate > returnDate)
                    {
                        ShowMessageBox("Departure date", "Ngày quay về phải sau ngày khởi hành");
                        return false;
                    }
                }
            }

            int adultNum = Convert.ToInt32(ddlAdt.SelectedValue);
            int childNum = Convert.ToInt32(ddlChd.SelectedValue);
            int infantNum = Convert.ToInt32(ddlInf.SelectedValue);
            if (infantNum > adultNum)
            {
                ShowMessageBox("Passengers", "Số khách trẻ sơ sinh phải nhỏ hơn số khách người lớn");
                return false;
            }

            return isOk;
        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {
            if (CheckValid())
            {
                string startPoint = hdnValueStartPoint.Value;
                string endPoint = hdnValueEndPoint.Value;

                //Làm thế này mới chạy được nhiều tab trên 1 trình duyệt và đặt booking chính xác
                string searchCondition =
                    startPoint
                    + "-" + endPoint
                    + "-" + txtDepartureDate.Text
                    + "-" + txtReturnDate.Text
                    + "-" + ddlAdt.SelectedValue
                    + "-" + ddlChd.SelectedValue
                    + "-" + ddlInf.SelectedValue
                    + "-" + rdbOneWay.Checked;

                searchCondition = searchCondition.Replace("/", "");

                Session[searchCondition + "Departure"] = startPoint;
                Session[searchCondition + "Destination"] = endPoint;
                Session[searchCondition + "DepartureDate"] = txtDepartureDate.Text;
                Session[searchCondition + "ReturnDate"] = txtReturnDate.Text;
                Session[searchCondition + "Adt"] = ddlAdt.SelectedValue;
                Session[searchCondition + "Chd"] = ddlChd.SelectedValue;
                Session[searchCondition + "Inf"] = ddlInf.SelectedValue;
                Session[searchCondition + "ItineraryType"] = rdbOneWay.Checked; //True is one way, False is round trip

                Session[searchCondition] = null;

                Response.Redirect("/Result.aspx?SearchCondition=" + searchCondition);
            }
        }

        protected void rdbOneWay_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbOneWay.Checked)
            {
                txtReturnDate.Visible = false;
                lblReturnDate.Visible = false;
            }
            else
            {
                txtReturnDate.Visible = true;
                lblReturnDate.Visible = true;
            }

            
        }

        protected void rdbRoundTrip_CheckedChanged(object sender, EventArgs e)
        {
            if (rdbOneWay.Checked)
            {
                txtReturnDate.Visible = false;
                lblReturnDate.Visible = false;
            }
            else
            {
                txtReturnDate.Visible = true;
                lblReturnDate.Visible = true;
            }

            Common utility = new Common();
            if (txtReturnDate.Text == "")
            {
                txtReturnDate.Text = utility.GetDateFormat(txtDepartureDate.Text, "dd/MM/yyyy").AddDays(6).ToString("dd/MM/yyyy");
            }
        }

        protected void lbtClose_Click(object sender, EventArgs e)
        {
            MessageBox.Visible = false;
        }

        public static bool CheckValidDate(string day, string format)
        {
            day = day.Replace("-", "/");
            DateTime date = DateTime.Now;
            CultureInfo provider = CultureInfo.InvariantCulture;
            return DateTime.TryParseExact(day, format, provider, DateTimeStyles.None, out date);
        }
    }
}